home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / c4 / pro20 / libpbm3.c < prev    next >
C/C++ Source or Header  |  1990-05-31  |  2KB  |  93 lines

  1. /* libpbm3.c - pbm utility library part 3
  2. **
  3. ** Copyright (C) 1988 by Jef Poskanzer.
  4. **
  5. ** Permission to use, copy, modify, and distribute this software and its
  6. ** documentation for any purpose and without fee is hereby granted, provided
  7. ** that the above copyright notice appear in all copies and that both that
  8. ** copyright notice and this permission notice appear in supporting
  9. ** documentation.  This software is provided "as is" without express or
  10. ** implied warranty.
  11. */
  12.  
  13. #include <stdio.h>
  14. #include "pbm.h"
  15. #include "libpbm.h"
  16.  
  17. void
  18. pbm_writepbminit( file, cols, rows )
  19. FILE *file;
  20. int cols, rows;
  21.     {
  22. #ifdef PBMPLUS_RAWBITS
  23.     fprintf( file, "%c%c\n%d %d\n", PBM_MAGIC1, RPBM_MAGIC2, cols, rows );
  24. #else /*PBMPLUS_RAWBITS*/
  25.     fprintf( file, "%c%c\n%d %d\n", PBM_MAGIC1, PBM_MAGIC2, cols, rows );
  26. #endif /*PBMPLUS_RAWBITS*/
  27.     }
  28.  
  29. void
  30. pbm_writepbmrow( file, bitrow, cols )
  31. FILE *file;
  32. bit *bitrow;
  33. int cols;
  34.     {
  35. #ifdef PBMPLUS_RAWBITS
  36.     register int col, bitshift;
  37.     register unsigned char item;
  38.     register bit *bP;
  39.  
  40.     bitshift = 7;
  41.     item = 0;
  42.     for ( col = 0, bP = bitrow; col < cols; col++, bP++ )
  43.     {
  44.     if ( *bP )
  45.         item += 1 << bitshift;
  46.     bitshift--;
  47.     if ( bitshift == -1 )
  48.         {
  49.         if ( putc( item, file ) == EOF )
  50.         pm_perror( 0 );
  51.         bitshift = 7;
  52.         item = 0;
  53.         }
  54.     }
  55.     if ( bitshift != 7 )
  56.     if ( putc( item, file ) == EOF )
  57.         pm_perror( 0 );
  58. #else /*PBMPLUS_RAWBITS*/
  59.     register int col, charcount;
  60.     register bit *bP;
  61.  
  62.     charcount = 0;
  63.     for ( col = 0, bP = bitrow; col < cols; col++, bP++ )
  64.     {
  65.     if ( charcount >= 70 )
  66.         {
  67.         if ( putc( '\n', file ) == EOF )
  68.         pm_perror( 0 );
  69.         charcount = 0;
  70.         }
  71.     if ( putc( *bP ? '1' : '0', file ) == EOF )
  72.         pm_perror( 0 );
  73.     charcount++;
  74.     }
  75.     if ( putc( '\n', file ) == EOF )
  76.     pm_perror( 0 );
  77. #endif /*PBMPLUS_RAWBITS*/
  78.     }
  79.  
  80. void
  81. pbm_writepbm( file, bits, cols, rows )
  82. FILE *file;
  83. bit **bits;
  84. int cols, rows;
  85.     {
  86.     int row;
  87.  
  88.     pbm_writepbminit( file, cols, rows );
  89.  
  90.     for ( row = 0; row < rows; row++ )
  91.     pbm_writepbmrow( file, bits[row], cols );
  92.     }
  93.